// Package utils
// @Title  encode.response.utils.go
// @Description  编码解析工具类
// @Author  alittlexincan@163.com  2024/07/22 11:36
// @Update  alittlexincan@163.com  2024/07/22 11:36
package utils

import (
	"context"
	"encoding/json"
	"errors"
	"net/http"

	res "xincan.com.cn/tarot-go-framework/utils/response"
)

// EncodeResponse
// Title    		编码解析函数
// Description   	application/json编码解析函数
// Auth      		alittlexincan@163.com         	"时间（2024/07/22 11:36）"
// Return    		error							"错误信息"
func EncodeResponse(_ context.Context, w http.ResponseWriter, response interface{}) error {
	w.Header().Set("Content-type", "application/json; charset=utf-8")
	// 错误处理, 如果response是error类型，则设置错误码
	if err, ok := response.(error); ok {
		// 自定义错误, 包含自定义错误码、错误信息、数据
		var myErr *res.ErrorResult
		if errors.As(err, &myErr) {
			w.WriteHeader(myErr.Code)
		} else {
			w.WriteHeader(http.StatusInternalServerError)
		}
	} else {
		w.WriteHeader(http.StatusOK)
	}
	return json.NewEncoder(w).Encode(response)
}
